{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from torch.utils.data import Dataset    # Dataset读取单个样本的抽象类，包括读取样本的标签、样本的索引、样本的特征\n",
    "from torch.utils.data import DataLoader   # 数据加载器，组合数据集和采样器，并在数据集上提供单进程或多进程迭代器\n",
    "from torchvision import datasets    # torchvision是PyTorch中专门用于图像处理的库,datasets是其中的数据集模块\n",
    "from torchvision.transforms import ToTensor\n",
    "\n",
    "from torch.nn import functional as F\n",
    "from torch import nn, optim\n",
    "\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_curve(data):\n",
    "    \"\"\"\n",
    "    loss下降曲线的绘制\n",
    "    :param data:\n",
    "    :return:\n",
    "    \"\"\"\n",
    "    # fig = plt.figure()\n",
    "    plt.plot(range(len(data)), data, color='blue')  #\n",
    "    plt.legend(['value'], loc='upper right')\n",
    "    plt.xlabel('step')\n",
    "    plt.ylabel('value')\n",
    "    plt.show()\n",
    "#  0：“T恤”、\n",
    "#     1: \"长裤\n",
    "#     2：\"套头衫\n",
    "#     3：\"连衣裙\n",
    "#     4：\"外套\n",
    "#     5：\"凉鞋\n",
    "#     6：\"衬衫\n",
    "#     7：\"运动鞋\n",
    "#     8：\"包\n",
    "#     9：\"踝靴\n",
    "\n",
    "def plot_image(img, label, name):\n",
    "    # fig = plt.figure()\n",
    "    labels_map = {\n",
    "    0: \"T-Shirt\",\n",
    "    1: \"Trouser\",\n",
    "    2: \"Pullover\",\n",
    "    3: \"Dress\",\n",
    "    4: \"Coat\",\n",
    "    5: \"Sandal\",\n",
    "    6: \"Shirt\",\n",
    "    7: \"Sneaker\",\n",
    "    8: \"Bag\",\n",
    "    9: \"Ankle Boot\",\n",
    "}\n",
    "    for i in range(6):\n",
    "        plt.subplot(2, 3, i + 1)    # 2行3列,i+1表示第几个子图\n",
    "        plt.tight_layout()  # 调整子图间距\n",
    "        plt.imshow(img[i][0] * 0.3081 + 0.1307, cmap='gray', interpolation='none')  \n",
    "        plt.title(\"{}: {}\".format(name, labels_map[label[i].item()]))  \n",
    "        plt.xticks([])  # 不显示x轴\n",
    "        plt.yticks([])  # 不显示y轴\n",
    "    plt.show()\n",
    "\n",
    "\n",
    "def one_hot(label, depth=10):\n",
    "    \"\"\"\n",
    "    one_hot编码\n",
    "    :param label:\n",
    "    :param depth:\n",
    "    :return:\n",
    "    \"\"\"\n",
    "    out = torch.zeros(label.size(0), depth)\n",
    "    idx = torch.LongTensor(label).view(-1, 1)\n",
    "    out.scatter_(dim=1, index=idx, value=1)\n",
    "    return out\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def load_dataset():\n",
    "    #从torchversion加载自带数据集\n",
    "    training_data = datasets.FashionMNIST(\n",
    "    root=\"../data\",    # 数据集存放路径\n",
    "    train=True,    # 是否为训练集\n",
    "    download=True,    # 是否下载\n",
    "    transform=ToTensor(),    # 数据转换方式\n",
    "    # transform=torchvision.transforms.Compose([  # 数据转换方式\n",
    "    #     torchvision.transforms.ToTensor(),  # 将PIL.Image或numpy.ndarray转换为torch.FloatTensor，并归一化到[0,1]\n",
    "    #     torchvision.transforms.Normalize(   # 标准化，均值为0，标准差为1\n",
    "    #         (0.1307,), (0.3081,))   # 均值和标准差\n",
    "    # ])\n",
    "    )\n",
    "    train_dataloader = DataLoader(training_data, batch_size=64, shuffle=True)    # DataLoader是一个迭代器，每次返回一个batch的数据\n",
    "    test_data = datasets.FashionMNIST(\n",
    "        root=\"../data\",\n",
    "        train=False,\n",
    "        download=True,\n",
    "        transform=ToTensor()\n",
    "    )\n",
    "    \n",
    "\n",
    "    test_dataloader = DataLoader(test_data, batch_size=64, shuffle=True)  \n",
    "    return train_dataloader, test_dataloader\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "class Net(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Net, self).__init__()\n",
    "\n",
    "        # xw + b\n",
    "        self.fc1 = nn.Linear(28 * 28, 256)\n",
    "        self.fc2 = nn.Linear(256, 64)\n",
    "        self.fc3 = nn.Linear(64, 10)\n",
    "\n",
    "    def forward(self, x):\n",
    "        # x: [b, 1, 28, 28]\n",
    "        # h1 = relu(xw1 + b)\n",
    "        x = F.relu(self.fc1(x))\n",
    "        # h2 = relu(h1w2 + b2)\n",
    "        x = F.relu(self.fc2(x))\n",
    "        # h3 = h2w3 + b3\n",
    "        x = self.fc3(x)\n",
    "\n",
    "        return x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1-定义一个Net_SoftMax网络\n",
    " super(Net_SoftMax, self).__init__()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3-损失函数换成交叉熵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(epoch_num, train_loader, net, optimizer):\n",
    "    train_loss = []\n",
    "    for epoch in range(epoch_num):\n",
    "        for batch_idx, (x, y) in enumerate(train_loader):\n",
    "            #############################3 x，y也放入cuda\n",
    "            x=x.to(device)\n",
    "            y=y.to(device)\n",
    "\n",
    "            # x: [b, 1, 28, 28], y: [512]\n",
    "            # [b, 1, 28, 28] => [b, feature]\n",
    "            x = x.view(x.size(0), 28 * 28)\n",
    "            # => [b, 10]\n",
    "            out = net(x)\n",
    "            # y_onehot = one_hot(y) # [b] => [b, 10]\n",
    "            # y_onehot = F.one_hot(y, 10).float()\n",
    "            # loss = mse(out, y_onehot)\n",
    "            # loss = F.mse_loss(out, y_onehot)    #test acc: 0.8554\n",
    "            # loss = F.mse_loss(out, y)  \n",
    "            loss = F.cross_entropy(out, y)   \n",
    "\n",
    "            optimizer.zero_grad()\n",
    "            loss.backward()\n",
    "            # w' = w - lr * grad\n",
    "            optimizer.step()\n",
    "\n",
    "            train_loss.append(loss.item())\n",
    "\n",
    "            if batch_idx % 100 == 0:\n",
    "                print('epoch {}, batch_idx {}, loss {}'.format(epoch, batch_idx, loss.item()))\n",
    "\n",
    "    return train_loss"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2-将小net继承Net_SoftMax（）\n",
    "\n",
    "没换之前test acc: 0.8554\n",
    "\n",
    "\n",
    "后：test acc: 0.8775\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using cuda device\n",
      "torch.Size([64, 1, 28, 28]) torch.Size([64]) tensor(0.) tensor(1.)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAn0AAAGkCAYAAABEqpO3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABX+0lEQVR4nO3daXgUVfo28DtkXwkhCWSBBEggQNiRXVYFBBEQlMVRNpf/AMMIoiDKIKigOCqIijoI6KC4OyqMIiLwooKCYiQi+w5hSyCEkAAh5/3glR6afh5IQYd0UvfvuvyQ20pVdadO16GTu4+XMcaAiIiIiMq1CqV9AkRERERU8jjpIyIiIrIBTvqIiIiIbICTPiIiIiIb4KSPiIiIyAY46SMiIiKyAU76iIiIiGyAkz4iIiIiG+Ckj4iIiMgGLE36Fi5cCC8vL+zZs6eEToeu1qpVq+Dl5YVVq1Zdl+MU/eft7Y0qVargjjvuwB9//HFV+0xMTMTQoUMdX+/ZswdeXl5YuHChe066DOJY81zXa6wBwB9//IG7774bNWvWREBAACIjI9G0aVOMHj0ap06dKvHjS7y8vPDEE09Y/r6yMq459jzX9Rx7ALBr1y6MHj0atWvXRmBgIIKCglC/fn08/vjjOHjwYIkdd/PmzXjiiSdK5Br0sbJxz549sXbtWsTExLj9RKhsmT59Ojp16oRz585hw4YNmDZtGlasWIFNmzYhLi6utE+vzONYo40bN6Jt27aoW7cu/vGPfyAxMRHHjx9HWloa3nvvPYwfPx5hYWGlfZrlDsceAcCSJUswcOBAREZGYvTo0WjSpAm8vLywadMmzJ8/H0uXLsXGjRtL5NibN2/G1KlT0bFjRyQmJrp135YmfVFRUYiKinLrCVDZlJycjFatWgEA2rdvj/DwcIwYMQILFy7EY489VspnV7LOnz8PLy8v+PhYGj6WcKzRrFmzUKFCBaxatQqhoaGOvH///njyySfBZdNLBsce7d69GwMHDkTt2rWxcuVKVKxY0fH/OnfujDFjxuDTTz8txTO8etf8692OHTsiNTUVa9euRZs2bRAYGIjExEQsWLAAALB06VI0bdoUQUFBaNCgAb766iunfe7YsQPDhg1DcnIygoKCEBcXh169emHTpk0ux//999/RtWtXBAUFISoqCqNGjcLSpUvFt3u/+eYbdOnSBWFhYQgKCkLbtm2xYsWKKz7GwsJCPPXUU6hTpw4CAwMRHh6Ohg0bYvbs2ZbPueit6HfffRcTJkxATEwMQkJC0KtXLxw5cgQ5OTm4//77ERkZicjISAwbNgynT5922oeXlxdGjx6N119/HbVr14a/vz/q1auH995774qPBQA2bNiA2267DREREQgICECTJk3wwQcfFOt7rSiaAO7duxcAMHToUPFfKE888QS8vLyu6hjfffcdunTpgtDQUAQFBaFNmzZYunSp4/+npaXBy8sLb775psv3fvnll/Dy8sLnn3/uyLZv347BgwcjOjoa/v7+qFu3Ll555RWn7yv6Gf773//GQw89hLi4OPj7+2PHjh1X9RiKi2PN2jmXx7GWmZmJsLAwhISEiP//4nG0fPly9O7dG/Hx8QgICEBSUhIeeOABHD9+3Ol7isbf77//jkGDBqFixYqoUqUKhg8fjuzsbKdtT506hfvuuw+VK1dGSEgIunfvjm3btrmch5Xrqizg2LN2zuVx7L3wwgvIzc3Fq6++6jThu/h8b7/9dqds/vz5aNSoEQICAhAREYG+ffu6/MnThg0bMHDgQCQmJjquoUGDBjnum8Cf198dd9wBAOjUqZPjT6nc9WcRbilyHD58GMOGDcO9996Lzz77DA0aNMDw4cMxbdo0PProo3jkkUfw8ccfIyQkBH369MGhQ4cc33vo0CFUrlwZzzzzDL766iu88sor8PHxQcuWLbF161bHdhkZGejQoQO2bt2KuXPn4u2330ZOTg5Gjx7tcj6LFi1C165dERYWhrfeegsffPABIiIi0K1btysOiJkzZ+KJJ57AoEGDsHTpUrz//vsYMWIETp48afmci0yaNAlHjx7FwoUL8fzzz2PVqlUYNGgQ+vXrh4oVK2Lx4sV45JFH8O9//xuTJk1y+f7PP/8cL730EqZNm4aPPvoICQkJGDRoED766KPLPpaVK1eibdu2OHnyJF577TV89tlnaNy4MQYMGOByASUmJl7T28hFk6CS+hfy6tWr0blzZ2RnZ+PNN9/E4sWLERoail69euH9998HADRq1AhNmjRxvBBfbOHChYiOjkaPHj0A/Pn2+Q033ID09HQ8//zzWLJkCXr27IkxY8Zg6tSpLt//6KOPYt++fXjttdfwxRdfIDo6ukQe55VwrNlnrLVu3RoZGRm46667sHr1auTl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ROQxOOkjIiIisgFO+oiIiIhsgJM+IiIiIhvgpI+IiIjIBspFe1dr37jL+PHjLW2vtYqstuCk7bV9W6WdS15enlv2/9lnn4m5toavxl2P1+7q168v5lpTVGu6aa1BrdF28803i7m2vmxmZqaY//jjj2K+dOlSMdcaf2vXri32Mbt37y7mWiNZaza/+eabYq61fbX9aK1H7Wei0dqN2uuodo2QTltjXGtsp6amWtq/1XXitfVis7KyxLx69epirl07UntXa4lrr+larq1XrO1fy7VxlZaWJubauu9aU9lKg7k08Z0+IiIiIhvgpI+IiIjIBjjpIyIiIrIBTvqIiIiIbICTPiIiIiIbKBft3ZJu07Ru3VrMtYajVVqT1h1rXmprMWrPjdW27N///ncxf+eddyydj9WcgGbNmrm0VHfu3CluqzUwtSaqtv2ePXvEvKCgQMy1xly7du3EfPny5WLerFkzMX/55ZfFXFvjtGXLli7ZAw88IG576623irm2tnZ+fr6Y16pVS8ytrnWrtXS1FrBGa2xqa/WuX7/e0v4JqFy5sphrz722zqvWLNfWSNdor+tBQUFirp2ntr6sdO1bvcdor/Va81gbJ9pxtfv1999/L+Z9+vQR8+zsbDHfsWOHmHsavtNHREREZAOc9BERERHZACd9RERERDbASR8RERGRDXDSR0RERGQD5aK9e/LkSTHX1t+0um6h1fad1h7S2kZaa0lba9MKq/vQzsVKGxIAZs+ebem42s9KW+uRAF9fX5fnbe7cueK2S5YsEfMtW7aIuXZtV61a1dJ+tDVztXVtt23bJuba2r5t27YV848++kjM16xZ45L17t1b3FZ7TKGhoWJudc1c7fXA399fzAMDA8Vca05r+4+IiLC0f669a53VdWc1x48fd8fpqK/f2v61+0BiYqKYS49Luy6113TtHqCNn+DgYDG3+tqlnY82DrXxoL0uaPuxuma2u/CdPiIiIiIb4KSPiIiIyAY46SMiIiKyAU76iIiIiGyAkz4iIiIiGygX7V1tbT6tTffdd99Z2n94eLiYa60frbVkdc3BkqQ1orTmk9Y00p5jq/z8/MTcXesnl0fr1q1zyU6dOiVue/PNN4v5P/7xDzFfu3atmGtr72rXzaZNm8T84MGDYt6vXz8x/+KLL8Rca5y2b99ezKUmndbGq1evnphr8vLyxFxrTmpr9WrPpUZrilrN9+/fL+ZWG6dk/R6g2b59uztOR702tUards/Txoqvr69LZvXTKrT2rtU16LXxo62HnJGRYWn/Gu1epa2NfezYMbcc1yq+00dERERkA5z0EREREdkAJ31ERERENsBJHxEREZENcNJHREREZAPlor1rde1dq+sZJiQkiLnW3g0KChJzrd1jpb3rjvV4L3dMrdmnrSt46623WjqulfYXUDrN5rLst99+s5Rra/XWrl1bzOvWrSvmWotba64eOHBAzOPi4sRca95pzf3MzEwx37Vrl0umNS2115Xs7Gwx115vtDFF5Zf2Om319XvHjh1irq2Bq9FeR7XX4+joaEv7kV6/rbZ0tTa79pxp22uvCSEhIWJu9RMitNc6rTWs3dtKC9/pIyIiIrIBTvqIiIiIbICTPiIiIiIb4KSPiIiIyAY46SMiIiKygXLR3tVaPBptHVnNpEmTxPzEiRNirrX1tNaSth6j1CrS1kTU9qGtW6g9B9oajZUqVRJzba1XzdatW8W8YcOGYq41ock9tHbtr7/+ail3l6+++qpE91+S2NKlItonO2ivoxqtha7dB7TX9aNHj4q5u9bHla59bTxYbTBrrVitRau18bWm8vr168Vca+lrz5n2M7e6lnZJ4zt9RERERDbASR8RERGRDXDSR0RERGQDnPQRERER2QAnfUREREQ2UC7au1FRUZa21xqLmhkzZljannRWW2TausdERJ5K+zQFq3bu3Cnm1atXF3N/f39LudYCDgsLE/PAwEAxl5q0WktXa9dqudaK1dq72r1EW3tXyw8dOiTmwcHBYq6df2RkpJgfOXJEzEsa3+kjIiIisgFO+oiIiIhsgJM+IiIiIhvgpI+IiIjIBjjpIyIiIrKBctHe1dYD1Ghr6mm0xpJGW7ewLLO6rqi2vbaWpPacaQ0tIiJPpb3+aeuwavmxY8fE/JtvvhHzPn36iHlKSoqYa+vHa6+72trBMTExxd6H1VZvbm6umOfn54u51or98ccfxXzLli1irp2/dq/SGtKhoaFiXlr4Th8RERGRDXDSR0RERGQDnPQRERER2QAnfUREREQ2wEkfERERkQ2Ui/aut7e3pe2trr2rNbG0tpGdWH3us7KyxFxrRFndPxFRadM+UUK7l2RkZIj5999/b+m4n332maWcdCtWrBDz7t27i7nWSo6Pj3fb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j8FJHxEREZENcNJHREREZAOc9BERERHZACd9RERERDbgke1drTWjrVWptea05qrW1jl8+LCY33zzzWKemJgo5hs3bhTziIgIMddavdKav3Xq1BG31db31NqN2nNWv359MdfamZrly5eLudau1X4m2vqHWiPK6nrL5B5aG1y7LlNTU8Vca49rDdiAgAAx19bFlmhraWpjJzIyUsy1x6o1ibXjag137dour2uElgXuamZq9zxt/9q12bFjRzFv1aqVmO/bt8/S+WjN8m3btrlk//3vf8VttXuA1ba81XWPNdonDFhtB3taS1fDd/qIiIiIbICTPiIiIiIb4KSPiIiIyAY46SMiIiKyAU76iIiIiGzAI9u72nqD7mqvaa2ckJAQMd+9e7eYa41CbR3FgwcPirnW6pXOf+XKleK22vrA2nOptR6151JbnzQrK0vMtaa19txbbUpp1wLXJy0d2vqYWhNVa7ppTVepyQ4ADRs2FHOtlSi1erVz0a4lbd3gX375Rcy1a1Ubg9pzoI1NrTmtjU0qeVabnNr2WrP0hhtuEPMWLVqIudSuBfRxGxcXJ+bfffedmK9bt84l0+6n2nhw1z3A6r1Ha0JbZfU1zV1rB1vFd/qIiIiIbICTPiIiIiIb4KSPiIiIyAY46SMiIiKyAU76iIiIiGzAI9u7WvtGo7VgrLZ7tKaU1oLLyMgQc629q60FvGXLFjGXzj8qKkrc9rfffhNzqw3BzMxMS9tXrlxZzKOjo8Vca2Fq52m1pcv2rmc5c+aMmMfGxor50aNHxbxmzZpirl1PVtbq1Vp3WvtfWx84JSVFzH/++Wcx19YxtbretLZmKZUd2lrRWlM8KChIzPfs2SPm2jWiNWy//vprMdfuM9J61Np1nJeXJ+baPUa77rVcayRra/iW9BrVnrYmL9/pIyIiIrIBTvqIiIiIbICTPiIiIiIb4KSPiIiIyAY46SMiIiKyAY9s72rNJK19o7WEtFxr4yYnJ1vKtSZThw4dxPyHH34Q806dOon5zp07XbLatWuL23777bdi3rJlSzE/ffq0mGstWq2lq7UztbVPteaW1i7TmlVaq5dKh9a809Zslq5tQB/7Wn748GEx164n6frW2v9a237r1q1irjUwtbFjdc1P7ZrXWsDac0Mlz+p6q9r22nWvvS5qn16g7X/FihVivmvXLjHXPpVBelza/Vobm9pzoz0m7bVFa+9qz5k2T7DK09bY1fCdPiIiIiIb4KSPiIiIyAY46SMiIiKyAU76iIiIiGyAkz4iIiIiG/DI9q5GW8POaqtXaw9pbSBt/9rau1pz1cdHfrq1Fp/U+vnll1+KvS2grzOsrVmq5dpzGRoaKubaz0prOLmL1qCk0qE1YLX1azVW14TWmq7SGLfaqNQajFpbVmtgas13be1urflesWJFMafSY7XJqTW8re5HWz9+1apVYq41WrU1f7XtpfPUzlHLrd4zrK5pq90L3bU2rqetsavhO31ERERENsBJHxEREZENcNJHREREZAOc9BERERHZACd9RERERDbgke3d7OxsMddatFpTT2v9aGv5HTp0SMy15qDWBvr999/FXHPs2DExl5qo2rqCWrv2u+++s7S91hC02pKMjY0Vc62ZqP1MtKaX1oTWGthUsrSxqf08jh8/bmk/Witbuy6161trH0q0dq12jlYbldo5Wn2dI89jdb1V7R6jNUK19eO1e4/2eml1nVqNlWvTXdexth+rLWB3rb3L9i4REREReQxO+oiIiIhsgJM+IiIiIhvgpI+IiIjIBjjpIyIiIrIBj2zvVqpUScy1lo3WytEaf1rrNiAgQMy1Np3WiNJaRdp+NNq6tlbOxeoxw8PDxVx7TFrL6/Tp02KuPcfaz1B7XFpe0mv7kiw+Pl7MtetJa7RqrW/tOrM61qSGnfZ6oL3ehIWFibl2TUZGRoq5tv6w1Wte2z+VHqsNVe11URs/S5YsEXNtDV+rn46gXftWmrFWx6a2vXbu2rlYbfVqDWbtuNonElg9bmnhHZKIiIjIBjjpIyIiIrIBTvqIiIiIbICTPiIiIiIb4KSPiIiIyAY8sr2bkJAg5labmVbX39TaN9p+/Pz8xFxrJwUFBYm51jK2siagdkztHLXnMj8/X8y15qDWfNRaYVbXSdaaT9rjPXXqlJhTyfryyy/FXGsT7tq1S8xjYmLEvGHDhmKuNdxDQkLEXBr7ERER4rZao3L9+vVivm3bNjHX1kk9cOCAmD/wwANirq1JrjXlqezQ1t7VrhHtmtXuMVrjVLvHaLmVVrL2Gu2u+7K7aOO8vK7vznf6iIiIiGyAkz4iIiIiG+Ckj4iIiMgGOOkjIiIisgFO+oiIiIhswCPbu9paeFabmVbXxtVaRVbXtdWaqOfOnbN0PlJzVWsOaS1d7ZjaOWr70ZpV2v6tro1rdT1G8ixvvPFGaZ+Ck5SUFDGXxvjvv/8ubhsVFSXmx44du/oTK4aVK1eW6P6p5GmfXqA5c+aMmFtdj1Zj5ZMgAP1TE6ysI2v1Exm0x6TtR3uOrX7Kh3Zv0+5hVnnamrx8p4+IiIjIBjjpIyIiIrIBTvqIiIiIbICTPiIiIiIb4KSPiIiIyAY8sr2rtem6d+8u5vv27RPzvLw8MddaQlYbqlabVVYbVFKjVTumtn6vtr3WfLLaiLK6f6uNZ21tX2290ZycHDGn0lFazbUbb7xRzD///PNi76N58+Zirq0zTHS1tNc5bU1eq6/HVteLtfqpCdL5aPc7q+upa7T9aPce7ZMpSvq1qLRauhq+00dERERkA5z0EREREdkAJ31ERERENsBJHxEREZENcNJHREREZAMe2d5dvny5mE+dOlXM4+LixLxy5cpirrVrtdaP1mTS2r5WW0gaqf3krrVora6LaJXV89SaVSdPnhTzOnXqiDnXLfUsJd1c067j77//XsyPHDlS7H2Hh4eLeUREhJhnZWWJuaetvUnWWf0ZWt0+MTFRzG+66SYxX7JkiZhHRkZaOq52D9Puhdp+Tp065ZJp7V3ttd7q9tp9PDg4WMwzMjLEPDY2Vsy18a99QoR2/tpzzLV3iYiIiKjEcNJHREREZAOc9BERERHZACd9RERERDbASR8RERGRDXiZEq6QnDp1ChUrVnTLvjp16mQp19be1WhNQK09FBQUJOZW1xy0Ijs7W8y1c7dKe6w+PtaK3lbPR1t70mrr7JFHHhHzy609mZ2djbCwsCucoedw55iyG+k61tr2SUlJYp6bmyvmWjtQGwtaQ7I8KGtjCnDvuHJXY7t9+/Zirp2n9jqtva4HBgZa2r92z5Nej7XHqq2bruVnzpyxlJ87d87S/rXxnJ6eLuYaq59YcTXzAXeMK77TR0RERGQDnPQRERER2QAnfUREREQ2wEkfERERkQ2U+DJs7uyJaH9wnZ+fL+Znz561tH+rf3CtbV+SRQ7tMblreTbtsZZ0kcPqsj9Wt7+csrYcVlk7X09i5bnTrjGrBQw7/rzK4mN25zm7a1/aPU8rplldFk67V2n3GStLjWnnohUttFx7rFquPWdarpUCrboe17w7jlHikz5tnbqrsWbNGks5UXHk5OSUqTasO8eU3Vh5gd+1a5dbjlkWJ0DXqqyNKcAzx9UPP/xQ2qdAHsQd46rEP7KlsLAQhw4dQmhoqNvejSJyB2MMcnJyEBsb67aPvLkeOKbIU5XVMQVwXJHncue4KvFJHxERERGVvrL1TzEiIiIiuiqc9BERERHZACd9RERERDbASR8RERGRDXDSR0RERGQDnPQRERER2QAnfUREREQ28P8Bc8Famv9fmMAAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 0, batch_idx 0, loss 2.332890510559082\n",
      "epoch 0, batch_idx 100, loss 0.7800116539001465\n",
      "epoch 0, batch_idx 200, loss 0.8610579967498779\n",
      "epoch 0, batch_idx 300, loss 0.5130839943885803\n",
      "epoch 0, batch_idx 400, loss 0.706516683101654\n",
      "epoch 0, batch_idx 500, loss 0.45575031638145447\n",
      "epoch 0, batch_idx 600, loss 0.34835320711135864\n",
      "epoch 0, batch_idx 700, loss 0.5877528190612793\n",
      "epoch 0, batch_idx 800, loss 0.4760061204433441\n",
      "epoch 0, batch_idx 900, loss 0.47306206822395325\n",
      "epoch 1, batch_idx 0, loss 0.49660855531692505\n",
      "epoch 1, batch_idx 100, loss 0.4135802686214447\n",
      "epoch 1, batch_idx 200, loss 0.3373713493347168\n",
      "epoch 1, batch_idx 300, loss 0.43686383962631226\n",
      "epoch 1, batch_idx 400, loss 0.4862257242202759\n",
      "epoch 1, batch_idx 500, loss 0.34221839904785156\n",
      "epoch 1, batch_idx 600, loss 0.33020275831222534\n",
      "epoch 1, batch_idx 700, loss 0.4126262664794922\n",
      "epoch 1, batch_idx 800, loss 0.4963449537754059\n",
      "epoch 1, batch_idx 900, loss 0.4355790913105011\n",
      "epoch 2, batch_idx 0, loss 0.19270645081996918\n",
      "epoch 2, batch_idx 100, loss 0.35196271538734436\n",
      "epoch 2, batch_idx 200, loss 0.4241611063480377\n",
      "epoch 2, batch_idx 300, loss 0.30747896432876587\n",
      "epoch 2, batch_idx 400, loss 0.3494127690792084\n",
      "epoch 2, batch_idx 500, loss 0.35109660029411316\n",
      "epoch 2, batch_idx 600, loss 0.4160318374633789\n",
      "epoch 2, batch_idx 700, loss 0.6506273150444031\n",
      "epoch 2, batch_idx 800, loss 0.4385189414024353\n",
      "epoch 2, batch_idx 900, loss 0.34863516688346863\n",
      "epoch 3, batch_idx 0, loss 0.29644352197647095\n",
      "epoch 3, batch_idx 100, loss 0.30164408683776855\n",
      "epoch 3, batch_idx 200, loss 0.3869185447692871\n",
      "epoch 3, batch_idx 300, loss 0.3553808629512787\n",
      "epoch 3, batch_idx 400, loss 0.26054561138153076\n",
      "epoch 3, batch_idx 500, loss 0.22286878526210785\n",
      "epoch 3, batch_idx 600, loss 0.44723746180534363\n",
      "epoch 3, batch_idx 700, loss 0.29333528876304626\n",
      "epoch 3, batch_idx 800, loss 0.3610129654407501\n",
      "epoch 3, batch_idx 900, loss 0.297434002161026\n",
      "epoch 4, batch_idx 0, loss 0.5117291808128357\n",
      "epoch 4, batch_idx 100, loss 0.36617720127105713\n",
      "epoch 4, batch_idx 200, loss 0.2525630295276642\n",
      "epoch 4, batch_idx 300, loss 0.24918556213378906\n",
      "epoch 4, batch_idx 400, loss 0.24158966541290283\n",
      "epoch 4, batch_idx 500, loss 0.322070449590683\n",
      "epoch 4, batch_idx 600, loss 0.3232751786708832\n",
      "epoch 4, batch_idx 700, loss 0.3545715808868408\n",
      "epoch 4, batch_idx 800, loss 0.3933100402355194\n",
      "epoch 4, batch_idx 900, loss 0.24385479092597961\n",
      "epoch 5, batch_idx 0, loss 0.17939768731594086\n",
      "epoch 5, batch_idx 100, loss 0.2345365285873413\n",
      "epoch 5, batch_idx 200, loss 0.278864324092865\n",
      "epoch 5, batch_idx 300, loss 0.28020530939102173\n",
      "epoch 5, batch_idx 400, loss 0.2373555302619934\n",
      "epoch 5, batch_idx 500, loss 0.3514866828918457\n",
      "epoch 5, batch_idx 600, loss 0.2902357876300812\n",
      "epoch 5, batch_idx 700, loss 0.1814412772655487\n",
      "epoch 5, batch_idx 800, loss 0.33492520451545715\n",
      "epoch 5, batch_idx 900, loss 0.16834524273872375\n",
      "epoch 6, batch_idx 0, loss 0.21261711418628693\n",
      "epoch 6, batch_idx 100, loss 0.18328207731246948\n",
      "epoch 6, batch_idx 200, loss 0.24099519848823547\n",
      "epoch 6, batch_idx 300, loss 0.35920166969299316\n",
      "epoch 6, batch_idx 400, loss 0.2933467626571655\n",
      "epoch 6, batch_idx 500, loss 0.14070278406143188\n",
      "epoch 6, batch_idx 600, loss 0.34709876775741577\n",
      "epoch 6, batch_idx 700, loss 0.24115025997161865\n",
      "epoch 6, batch_idx 800, loss 0.28276297450065613\n",
      "epoch 6, batch_idx 900, loss 0.21942685544490814\n",
      "epoch 7, batch_idx 0, loss 0.318682461977005\n",
      "epoch 7, batch_idx 100, loss 0.22811155021190643\n",
      "epoch 7, batch_idx 200, loss 0.33386051654815674\n",
      "epoch 7, batch_idx 300, loss 0.3152470886707306\n",
      "epoch 7, batch_idx 400, loss 0.3375021517276764\n",
      "epoch 7, batch_idx 500, loss 0.44137558341026306\n",
      "epoch 7, batch_idx 600, loss 0.38562706112861633\n",
      "epoch 7, batch_idx 700, loss 0.25113922357559204\n",
      "epoch 7, batch_idx 800, loss 0.3541533648967743\n",
      "epoch 7, batch_idx 900, loss 0.2895069122314453\n",
      "epoch 8, batch_idx 0, loss 0.18189102411270142\n",
      "epoch 8, batch_idx 100, loss 0.2555062770843506\n",
      "epoch 8, batch_idx 200, loss 0.3979231119155884\n",
      "epoch 8, batch_idx 300, loss 0.13086095452308655\n",
      "epoch 8, batch_idx 400, loss 0.1836313009262085\n",
      "epoch 8, batch_idx 500, loss 0.46992582082748413\n",
      "epoch 8, batch_idx 600, loss 0.3005816638469696\n",
      "epoch 8, batch_idx 700, loss 0.3170468211174011\n",
      "epoch 8, batch_idx 800, loss 0.27155300974845886\n",
      "epoch 8, batch_idx 900, loss 0.2185441553592682\n",
      "epoch 9, batch_idx 0, loss 0.28461378812789917\n",
      "epoch 9, batch_idx 100, loss 0.37241125106811523\n",
      "epoch 9, batch_idx 200, loss 0.3705015480518341\n",
      "epoch 9, batch_idx 300, loss 0.5220972895622253\n",
      "epoch 9, batch_idx 400, loss 0.3499282896518707\n",
      "epoch 9, batch_idx 500, loss 0.2715786099433899\n",
      "epoch 9, batch_idx 600, loss 0.420847088098526\n",
      "epoch 9, batch_idx 700, loss 0.382026731967926\n",
      "epoch 9, batch_idx 800, loss 0.15316049754619598\n",
      "epoch 9, batch_idx 900, loss 0.19880616664886475\n"
     ]
    },
    {
     "data": {
      "image/png": "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dzhCMRERkXZcrmNo0qQJ9u3bh9tvvx333nsvrly5gr59+2L37t24+eab1YjR77DmhoiISDs6KcgGqCkuLkZMTAyKiooQHR2tyj70eiA01HxZcB1lIiIiZbly/nb5stSmTZscvt6pUydXNxlweFmKiIhIOy4nN126dLFapjM5m5eXl3sUUCBgckNERKQdl1uHXLhwwexWWFiINWvWoG3btli7dq0aMRIRERHJ5nLNTUxMjNWye++9FxERERg3bhx27dqlSGBERERE7lCsX0/NmjVx+PBhpTZHRERE5BaXa2727dtn9lySJOTn52PWrFlo0aKFYoERERERucPl5KZly5bQ6XSw7EHerl07ZGRkKBYYERERkTtcTm5ycnLMnoeEhKBmzZqIjIxULCgiIiIid7mc3CQlJakRBxEREZEiZCU38+bNk73B0aNHux0MERERkadkTb+QnJwsb2M6HY4dO+ZxUGryxvQLgPVAfpx+gYiIyH2KT79g2c6GiIiIyFdx/moiIiIKKC43KAaAkydPYuXKlcjNzUVpaanZa3PmzFEkMCIiIiJ3uJzcrFu3Dg888ACSk5Nx+PBhNGvWDMePH4ckSWjdurUaMQaE69eBSpW0joKIiCjwuXxZatKkSXj++efx+++/IzIyEpmZmcjLy0Pnzp3Rr18/NWIMCDffrHUEREREwcHl5ObQoUMYNmwYACAsLAzXrl1DlSpVMG3aNLz55puKBxgo8vK0joCIiCg4uJzc3HDDDSgpKQEAJCQk4K+//jK+dvbsWeUiIyIiInKDy21u2rVrh19++QVNmjRBz5498fzzz2P//v3IyspCu3bt1IiRiIiISDaXk5s5c+bg8uXLAICpU6fi8uXLWL58ORo0aIB3331X8QCJiIiIXOFycjN9+nQMHjwYkiShcuXKmD9/vhpxEREREbnF5TY3586dQ8+ePVGnTh08//zz2LNnjwphEREREbnH5eRm5cqVKCgowKuvvopdu3YhJSUFTZo0wRtvvIHjx4+rECIRERGRfLImznTk5MmT+Pzzz5GRkYEjR46grKxMqdhUodXEmQAnzyQiInKXK+dvj+aWun79Onbu3Int27fj+PHjiI+P92RzRERERB5zK7lZv349nn76acTHx2PYsGGoWrUqvv32W+RxpDoiIiLSmMu9perUqYNz586hW7du+M9//oNevXoh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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test acc: 0.8683\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmYAAAGkCAYAAACb5OmoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABMBklEQVR4nO3dZ3hVZdr28SuB9FBCCSEEEiQkAaSqgAoCFqIMjgjWcRDUmRfrOKCPYAcLKjijjo4POoPYkKIg1sGCwKOCgoJgAYw0A6GFGkIN3O8HDzKGfV2QpUHunfx/x+EHTxdrr72y1t43233minDOOQEAAMBxF3m8DwAAAAA/YWEGAADgCRZmAAAAnmBhBgAA4AkWZgAAAJ5gYQYAAOAJFmYAAACeYGEGAADgCRZmAAAAnqi0C7M5c+bI8OHDZdu2bcf0cZ5++ml5/vnnK2RfGzZskGHDhknr1q0lMTFRYmNjpXnz5nLzzTdLXl5ehTyGpqCgQIYPHy5fffXVMXsMhL9wu6fy8/Pl+uuvl6ysLImLi5M6depI69at5c9//rPk5+eXbjdw4EBJTEws1z4jIiJk+PDh5dr2tzpf8E+43Cvdu3eXiIiIo/5T3mseFaP68T6AY2XOnDkyYsQIGThwoNSuXfuYPc7TTz8t9erVk4EDB/6q/cybN0969+4tzjm58cYb5dRTT5Xo6GhZtmyZvPzyy9KxY0fZunVrxRz0YQoKCmTEiBGSkZEh7dq1OyaPgfAXTvfUmjVrpEOHDlK7dm255ZZbJDs7W7Zv3y7fffedTJ48WVasWCGNGzcOvN+5c+dKWlpaubb9rc4X/BMu98rTTz8tO3bsKP33d955Rx544AEZN26c5OTklOblveZRMSrtwiyc7NixQy644AKJjY2VOXPmlLkJunfvLoMGDZLXXnvtOB4hEF7+9a9/SWFhocybN0+aNm1amvfp00fuuOMOOXjw4C/ab+fOnY+6ze7duyU2NvYX7R/4LbVs2bLMvy9dulRERE488UQ5+eSTzT+3a9cuiY+PP6bHdiwcujcjIiKO96EcmauE7r33XiciIf/MnDmzdJuJEye6zp07u/j4eJeQkOB69uzpFixYUGY/y5cvd5deeqlr2LChi46OdsnJye7MM890CxcudM45l56eHvIY6enpgY/30UcfdSLiJkyYUO4/88Ybb7jOnTu7uLg4l5iY6M4++2w3Z86cMtvk5eW5gQMHuszMTBcXF+dSU1Nd79693eLFi0u3mTlzpnqu7r333sDPA5VXuN1TN9xwg4uMjHQ7d+486rYDBgxwCQkJLi8vz5133nkuISHBpaWluSFDhrg9e/aU2fbwe2PcuHFORNx7773nrrrqKlevXj0nIm7o0KFHPV+onMLtXvm5Q9fz/PnzQ57Pl19+6fr16+dq167tUlJSnHPO7d692w0bNsxlZGS4qKgol5qa6q6//nq3devWMvu13lPS09PdgAEDSv+9uLjY3XLLLS4jI8PFxMS4pKQkd9JJJ7lXXnmlzJ+bP3++O//8811SUpKLiYlx7dq1c5MmTVKfy+H35u7du3/VOfotVMpPzP70pz/Jli1b5Mknn5SpU6dKw4YNReS/fzsYOXKk3HXXXXLVVVfJXXfdJfv27ZPRo0dL165dZd68eaXb9erVSw4cOCCjRo2SJk2aSGFhocyZM6f0ewOvv/66XHTRRVKrVi15+umnRUQkJiam9Di6d+8us2fPFufcEY/3/fffl2rVqsn5559fruf3yiuvyBVXXCE9e/aUCRMmyN69e2XUqFHSvXt3mTFjhnTp0kVEfvpflHXr1pWHH35Y6tevL1u2bJEXXnhBOnXqJAsXLpTs7Gzp0KGDjBs3rvRc/O53vxMRPrpGWeF2T5166qnyz3/+U/r27StDhgyRU089VWrWrGluv3//fvn9738v11xzjdxyyy3yf//3f3L//fdLrVq15J577jnq+bn66qvld7/7nbz00ktSXFwsJ598suzatcs8X6i8wu1eKa++ffvKZZddJtdee60UFxeLc0769OkjM2bMkNtvv126du0qixcvlnvvvVfmzp0rc+fOLXM85TFkyBB56aWX5IEHHpD27dtLcXGxfPPNN7J58+bSbWbOnCnnnnuudOrUScaMGSO1atWSiRMnyqWXXiq7du0K+d+6h9+bUVFRFXE6jq3juy48dkaPHu1ExK1cubJM/uOPP7rq1au7m266qUxeVFTkUlJS3CWXXOKcc66wsNCJiHv88ceP+DitWrVy3bp1U//bmWee6apVq3bUY83JySn9G8jRHDhwwKWmprrWrVu7AwcOlDn+5ORkd9ppp5l/tqSkxO3bt881b97cDR48uDSfP3++ExE3bty4ch0DqqZwuqcOHjzoBg0a5CIjI52IuIiICNeiRQs3ePDgkOMfMGCAExE3efLkMnmvXr1cdnZ2mUyMT8yuvPLKkGOwzhcqv3C6V37uSJ+Y3XPPPWW2nT59uhMRN2rUqDL5pEmTnIi4Z599tjQ7/L455PBPzE488UTXp0+fIx5jTk6Oa9++vdu/f3+ZvHfv3q5hw4al74tHujd9V2lbmZb33ntPSkpK5Morr5SSkpLSf2JjY6Vbt24ya9YsERGpU6eONGvWTEaPHi1///vfZeHChYG/lzJjxgwpKSmp0ONftmyZFBQUSP/+/SUy8r8/vsTEROnXr5989tlnsmvXLhERKSkpkZEjR0rLli0lOjpaqlevLtHR0ZKXlydLliyp0ONC1eXjPRURESFjxoyRFStWyNNPPy1XXXWV7N+/Xx577DFp1aqVzJ49O2T7wz+xbtOmjaxevbpcx9WvX7/yPwlUWT7eK+V1+DX+0UcfiYiEfEJ18cUXS0JCgsyYMSPwY3Ts2FH+85//yLBhw2TWrFmye/fuMv/9hx9+kKVLl8oVV1whIlLmHPbq1UvWrVsny5YtO+Jxh4MqtzDbsGGDiIiccsopEhUVVeafSZMmSWFhoYj89EI9Y8YMyc3NlVGjRkmHDh2kfv368pe//EWKiooq9JiaNGkimzZtkuLi4qNue+gj3UMfj/9camqqHDx4sLS9OWTIELn77rulT58+8tZbb8nnn38u8+fPl7Zt24Zc8MAv5eM9dUh6erpcd911MnbsWMnLy5NJkybJnj175H/+53/KbBcfHx/yhf2YmBjZs2dPuR5Hux+Bw/l8rxzN4df45s2bpXr16lK/fv0yeUREhKSkpJT534/l9Y9//EOGDh0q06ZNkx49ekidOnWkT58+pb8u6tD5u/XWW0PO3/XXXy8iUnoOreMOB5XyO2ZHUq9ePRERee211yQ9Pf2I26anp8vYsWNFROT777+XyZMny/Dhw2Xfvn0yZsyYCjum3Nxcef/99+Wtt96Syy677Ijb1q1bV0RE1q1bF/LfCgoKJDIyUpKSkkRE5OWXX5Yrr7xSRo4cWWa7wsJC6vuoMD7eU5ZLLrlEHnroIfnmm28qdL/et7zghXC6Vw53+DVet25dKSkpkU2bNpVZnDnnZP369XLKKaeUZjExMbJ3796QfR6+eEtISJARI0bIiBEjZMOGDaWfnp1//vmydOnS0vN3++23S9++fdXjzM7OPuJxh4NKuzA79KXDwz8Zys3NlerVq8vy5csDfcSZlZUld911l0yZMkUWLFhQ5nF+7adP11xzjYwePVpuu+026dq1qzRq1Chkm6lTp0rfvn0lOztbGjVqJK+88orceuutpRddcXGxTJkyRU499dTSGnNERETIly/feecdWbt2rWRmZpZ5DiKh5wr4uXC6p9atW6f+TXnnzp2Sn58vqampv2r/5cF9VXWF073yS5111lkyatQoefnll2Xw4MGl+ZQpU6S4uFjOOuus0iwjI0MWL15c5s9/9NFHsnPnTnP/DRo0kIEDB8qiRYvk8ccfl127dkl2drY0b95cFi1aFPKBQ2VSaRdmrVu3FhGRJ554QgYMGCBRUVGSnZ0tGRkZct9998mdd94pK1askHPPPVeSkpJkw4YNMm/evNIV++LFi+XGG2+Uiy++WJo3by7R0dHy0UcfyeLFi2XYsGFlHmfixIkyadIkOeGEEyQ2Nrb0sc866yyZPXv2Uf8/f61ateSNN96Q3r17S/v27cv8gtm8vDx5+eWXZdGiRdK3b1+JjIyUUaNGyRVXXCG9e/eWQYMGyd69e2X06NGybds2efjhh0v327t3b3n++eclJydH2rRpI19++aWMHj06pHHZrFkziYuLk/Hjx0uLFi0kMTFRUlNTf5M3L4SPcLqnHnzwQfn000/l0ksvlXbt2klcXJysXLlSnnrqKdm8ebOMHj362J2onz0PkdDzVaNGjWP+2Di+wule+aXOOeccyc3NlaFDh8qOHTvk9NNPL21ltm/fXvr371+6bf/+/eXuu++We+65R7p16ybfffedPPXUU1KrVq0y++zUqZP07t1b2rRpI0lJSbJkyRJ56aWXynzg8Mwzz8h5550nubm5MnDgQGnUqJFs2bJFlixZIgsWLJBXX331mDzf39Txbh8cS7fffrtLTU0tbWb9/PfITJs2zfXo0cPVrFnTxcTEuPT0dHfRRRe5Dz/80Dnn3IYNG9zAgQNdTk6OS0hIcImJia5NmzbusccecyUlJaX7WbVqlevZs6erUaNGyO+R6datmwtyitevX++GDh3qWrVq5eLj411MTIzLzMx0gwYNcl9//XWZbadNm+Y6derkYmNjXUJCgjvrrLPcp59+WmabrVu3umuuucYlJye7+Ph416VLF/fxxx+7bt26hTR5JkyY4HJyclxU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LMwAAAA8wcIMAADAEyzMAAAAPMHCDAAAwBMszAAAADzBwgwAAMATLMwAAAA8UWkXZnPmzJHhw4fLtm3bjunjPP300/L8889XyL42bNggw4YNk9atW0tiYqLExsZK8+bN5eabb5a8vLwKeQxNQUGBDB8+XL766qtj9hjwR7jdG/n5+XL99ddLVlaWxMXFSZ06daR169by5z//WfLz83/9gVaAgQMHSmJi4vE+DIS5cLo3V61aJREREWX+qVmzprRt21Yef/xxOXDgQMUcbBVUqRdmI0aMCIsLXERk3rx50rp1axk7dqxcdNFFMnXqVJk+fbrceuutsmDBAunYseOvP1hDQUGBjBgxgoVZFRFO98aaNWukQ4cO8sEHH8iQIUPk3Xffleeee04uv/xymT9/vqxYsaJiDhbwQDjdm4fcdNNNMnfuXJk7d65MnjxZTj/9dBk8eLDcdtttFbL/qqj68T4AiOzYsUMuuOACiY2NlTlz5khaWlrpf+vevbsMGjRIXnvtteN4hMDx8a9//UsKCwtl3rx50rRp09K8T58+cscdd8jBgweP49H9dvbv3y8RERFSvTov2fBLkyZNpHPnzqX/fu6558o333wjEyZMkL/97W/H8cjCmKuE7r33XiciIf/MnDmzdJuJEye6zp07u/j4eJeQkOB69uzpFixYUGY/y5cvd5deeqlr2LChi46OdsnJye7MM890CxcudM45l56eHvIY6enpgY/30UcfdSLiJkyYUO4/88Ybb7jOnTu7uLg4l5iY6M4++2w3Z86cMtvk5eW5gQMHuszMTBcXF+dSU1Nd79693eLFi0u3mTlzpnqu7r333sDPA/4Lt3vjhhtucJGRkW7nzp1H3XbAgAEuISHB5eXlufPOO88lJCS4tLQ0N2TIELdnz54y2+7du9fdf//9Ljs720VHR7t69eq5gQMHuo0bN5bZbuLEie6cc85xKSkpLjY21uXk5LihQ4eGHM+hx/65Tz75xNWtW9f97ne/K93++++/d5dffrmrX7++i46Odjk5Oe6pp54q8+cO3ZMvvviiGzJkiEtNTXURERFuyZIl5T5vCD/hdm+uXLnSiYgbPXp0yH/r3bu3a9KkSZmsvPeSc849++yzrnnz5i46Otq1aNHCjR8/3g0YMOAXHWc4qpQLs/z8fHfTTTc5EXFTp051c+fOdXPnznXbt293zjn34IMPuoiICHf11Ve7t99+202dOtWdeuqpLiEhwX377bel+8nOznaZmZnupZdecrNnz3ZTpkxxt9xyS+mNsmDBAnfCCSe49u3blz7Gz2+Sbt26ufKsfXv27OmqVatWrjcf55wbP368ExHXs2dPN23aNDdp0iR30kknuejoaPfxxx+Xbjd79mx3yy23uNdee83Nnj3bvf76665Pnz4uLi7OLV261Dnn3Pbt2924ceOciLi77rqr9Hnk5+eX61gQXsLt3nj55ZdLr/Xp06eXHqdmwIABpS/kjz76qPvwww/dPffc4yIiItyIESNKtztw4IA799xzXUJCghsxYoT74IMP3L///W/XqFEj17JlS7dr167Sbe+//3732GOPuXfeecfNmjXLjRkzxjVt2tT16NEj5LF/vjCbNGmSi4mJcdddd50rKSlxzjn37bffulq1arnWrVu7F1980b3//vvulltucZGRkW748OGlf/bQwqxRo0buoosucm+++aZ7++233ebNm496vhC+wu3ePLQwe+SRR9z+/fvd/v37XWFhoRs7dqyrXr26u/POO8tsX9576ZlnnnEi4vr16+fefvttN378eJeVleXS09NZmIW70aNHOxFxK1euLJP/+OOPrnr16u6mm24qkxcVFbmUlBR3ySWXOOecKywsdCLiHn/88SM+TqtWrVy3bt3U/3bmmWe6atWqHfVYc3JyXEpKylG3c+6nN5XU1FTXunVrd+DAgTLHn5yc7E477TTzz5aUlLh9+/a55s2bu8GDB5fm8+fPdyLixo0bV65jQHgLp3vj4MGDbtCgQS4yMtKJiIuIiHAtWrRwgwcPDjn+AQMGOBFxkydPLpP36tXLZWdnl/77hAkTnIi4KVOmlNnu0H3w9NNPm8eyf/9+N3v2bCcibtGiRWUe+9DC7OGHH3bVqlVzjzzySJk/n5ub69LS0kIWlzfeeKOLjY11W7Zscc79d2F2xhlnHPX8oHIJp3vz0MJM+2fgwIGlfyHRWPfSgQMHXEpKiuvUqVOZ7VevXu2ioqKqzMKs0n753/Lee+9JSUmJXHnllVJSUlL6T2xsrHTr1k1mzZolIiJ16tSRZs2ayejRo+Xvf/+7LFy4MPD3WWbMmCElJSUVevzLli2TgoIC6d+/v0RG/vfHl5iYKP369ZPPPvtMdu3aJSIiJSUlMnLkSGnZsqVE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",
      "text/plain": [
       "<Figure size 640x480 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "########################1调用cuda\n",
    "device = (\n",
    "    \"cuda\"\n",
    "    if torch.cuda.is_available()\n",
    "    else \"mps\"\n",
    "    if torch.backends.mps.is_available()\n",
    "    else \"cpu\"\n",
    ")\n",
    "print(f\"Using {device} device\")\n",
    "\n",
    "train_loader, test_loader = load_dataset()\n",
    "x, y = next(iter(train_loader)) # 取出一个batch的数据\n",
    "print(x.shape, y.shape, x.min(), x.max())\n",
    "plot_image(x, y, \"image sample\")\n",
    "\n",
    "# net = Net() #调用Net类\n",
    "\n",
    "#####################2网络放入cuda（3）在net（）\n",
    "net=Net().to(device)\n",
    "# net=Net_SoftMax().to(device)    #在网络最后一层用softmax\n",
    "\n",
    "\n",
    "# [w1, b1, w2, b2, w3, b3]\n",
    "optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)  #定义优化器\n",
    "\n",
    "epoch_num = 10   #训练次数1\n",
    "train_loss = train(epoch_num, train_loader, net, optimizer) #训练返回loss\n",
    "\n",
    "plot_curve(train_loss)  #绘制下降曲线\n",
    "# 得到参数[w1, b1, w2, b2, w3, b3]\n",
    "\n",
    "total_correct = 0   #初始化一个变量，用于记录正确的个数\n",
    "for x, y in test_loader:\n",
    "    x=x.to(device)\n",
    "    y=y.to(device)\n",
    "    x = x.view(x.size(0), 28 * 28)\n",
    "    out = net(x)\n",
    "    # out: [b, 10] => pred: [b]\n",
    "    pred = out.argmax(dim=1)    #返回最大值的索引\n",
    "    correct = pred.eq(y).sum().float().item()   #计算正确的个数，eq()比较两个tensor是否相等，sum()求和，float()转换为浮点数，item()返回元素值\n",
    "    total_correct += correct    #累加正确的个数\n",
    "\n",
    "total_num = len(test_loader.dataset)    #测试集的总数\n",
    "acc = total_correct / total_num #计算准确率\n",
    "print('test acc:', acc)\n",
    "\n",
    "\n",
    "x, y = next(iter(test_loader))  #取出一个batch的数据，iter()返回一个迭代器，next()返回迭代器的下一个项目？？\n",
    "####################4  测试用的数据也需要去调用cuda推理\n",
    "x=x.to(device)\n",
    "y=y.to(device)\n",
    "out = net(x.view(x.size(0), 28 * 28))   #预测，此时out是一个tensor，存储的是一组预测值，每个值是一个10维的向量\n",
    "pred = out.argmax(dim=1)    #取出预测值中最大的索引，即预测的类别\n",
    "####################5  取出来画图\n",
    "x=x.to('cpu')\n",
    "pred=pred.to('cpu')\n",
    "plot_image(x, pred, 'test') #绘制图像\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 作业\n",
    "训练cifar10。一共包含10 个类别的RGB 彩色图片：飞机（ airplane ）、汽车（ automobile ）、鸟类（ bird ）、猫（ cat ）、鹿（ deer ）、狗（ dog ）、蛙类（ frog ）、马（ horse ）、船（ ship ）和卡车（ truck ）。每个图片的尺寸为32 × 32 ，每个类别有6000个图像，数据集中一共有50000 张训练图片和10000 张测试图片。\n",
    "修改网络输入维度即可训练，调整超参数使得精度达到较高水平。\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "dl2024",
   "language": "python",
   "name": "dl2024"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.19"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
